const express = require('express');
const http = require('http');
const WebSocket = require('ws');

const app = express();
const server = http.createServer(app);
const wss = new WebSocket.Server({ server });

// 提供静态文件
app.use(express.static('public'));

// WebSocket 连接处理
wss.on('connection', function connection(ws, request) {
    console.log('新的 WebSocket 连接');

    // 发送连接成功消息
    ws.send(JSON.stringify({
        type: 'connection',
        message: '连接成功',
        timestamp: new Date().toISOString()
    }));

    //收到消息的事件
    ws.on('message', function message(data) {
        try {
            const parsedData = JSON.parse(data);
            console.log('收到 JSON 消息:', parsedData);

            // 处理不同类型的消息
            switch (parsedData.type) {
                case 'chat':
                    // 广播聊天消息
                    broadcast({
                        type: 'chat',
                        user: parsedData.user,
                        message: parsedData.message,
                        timestamp: new Date().toISOString()
                    });
                    break;
                case 'ping':
                    ws.send(JSON.stringify({ type: 'pong' }));
                    break;
                default:
                    ws.send(JSON.stringify({
                        type: 'error',
                        message: '未知的消息类型'
                    }));
            }
        } catch (error) {
            console.error('消息解析错误:', error);
            ws.send(JSON.stringify({
                type: 'error',
                message: '消息格式错误'
            }));
        }
    });

    ws.on('close', function close() {
        console.log('客户端断开连接');
    });
});

// 广播消息给所有客户端
function broadcast(data) {
    wss.clients.forEach(function each(client) {
        if (client.readyState === WebSocket.OPEN) {
            client.send(JSON.stringify(data));
        }
    });
}

// 启动服务器
server.listen(3030, function() {
    console.log('服务器运行在 http://localhost:3030');
});